package pe.edu.sistemas.samupg.domain.model;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;

import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * Periodo generated by hbm2java
 */
@Entity
@Table(name = "periodo", schema = "bd_samupg")
public class Periodo implements java.io.Serializable {

	private static final long serialVersionUID = 5527089861348640412L;

	private Long periodoId;
	private String nombre;
	private Date fechaInicio;
	private Date fechaFin;
	private Boolean actual;
	private Set<Maestria> maestrias = new HashSet<Maestria>(0);

	public Periodo() {
	}

	public Periodo(String periodoNombre, Date periodoFecInicio,
			Date periodoFecFin) {
		this.nombre = periodoNombre;
		this.fechaInicio = periodoFecInicio;
		this.fechaFin = periodoFecFin;
	}

	public Periodo(String periodoNombre, Date periodoFecInicio,
			Date periodoFecFin, Boolean periodoActual, Set<Maestria> maestrias) {
		this.nombre = periodoNombre;
		this.fechaInicio = periodoFecInicio;
		this.fechaFin = periodoFecFin;
		this.actual = periodoActual;
		this.maestrias = maestrias;
	}

	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "periodo_id", unique = true, nullable = false)
	public Long getPeriodoId() {
		return this.periodoId;
	}

	public void setPeriodoId(Long periodoId) {
		this.periodoId = periodoId;
	}

	@Column(name = "periodo_nombre", nullable = false, length = 100)
	public String getNombre() {
		return this.nombre;
	}

	public void setNombre(String periodoNombre) {
		this.nombre = periodoNombre;
	}

	@Temporal(TemporalType.DATE)
	@Column(name = "periodo_fec_inicio", nullable = false, length = 10)
	public Date getFechaInicio() {
		return this.fechaInicio;
	}

	public void setFechaInicio(Date periodoFecInicio) {
		this.fechaInicio = periodoFecInicio;
	}

	@Temporal(TemporalType.DATE)
	@Column(name = "periodo_fec_fin", nullable = false, length = 10)
	public Date getFechaFin() {
		return this.fechaFin;
	}

	public void setFechaFin(Date periodoFecFin) {
		this.fechaFin = periodoFecFin;
	}

	@Column(name = "periodo_actual", nullable = false)
	public Boolean getActual() {
		return this.actual;
	}

	public void setActual(Boolean actual) {
		this.actual = actual;
	}

	@ManyToMany(fetch = FetchType.LAZY)
	@JoinTable(name = "maestria_periodo", schema = "bd_samupg", 
		joinColumns = { @JoinColumn(name = "mp_periodo_id", nullable = false, updatable = false) }, 
		inverseJoinColumns = { @JoinColumn(name = "mp_maestria_id", nullable = false, updatable = false) })
	public Set<Maestria> getMaestrias() {
		return this.maestrias;
	}

	public void setMaestrias(Set<Maestria> maestrias) {
		this.maestrias = maestrias;
	}
}
